home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 22
/
Cream of the Crop 22.iso
/
doom
/
quake1.zip
/
SPREDGUN.ZIP
/
SPREDGUN.QC
< prev
next >
Wrap
Text File
|
1996-08-12
|
20KB
|
683 lines
/*
==============================================================================
BEGINING CRAP
==============================================================================
*/
void() W_ChangeWeapon;
void() W_SetCurrentAmmo;
void() HomeThink;
entity() HomeFindTarget;
float(entity targ) visible;
float(entity targ) infront;
void() s_spreadexplode1 = [0, s_spreadexplode2] {};
void() s_spreadexplode2 = [1, s_spreadexplode3] {};
void() s_spreadexplode3 = [2, s_spreadexplode4] {};
void() s_spreadexplode4 = [3, s_spreadexplode5] {};
void() s_spreadexplode5 = [4, s_spreadexplode6] {};
void() s_spreadexplode6 = [5, SUB_Remove] {};
/*
==============================================================================
DOG ROCKET
==============================================================================
*/
vector(float dm) DogVelocityForDamage =
{
local vector v;
v_x = 100 * random();
v_y = 100 * random();
v_z = 200 + 100 * random();
if (dm > -50)
{
// dprint ("level 1\n");
v = v * 0.7;
}
else if (dm > -200)
{
// dprint ("level 3\n");
v = v * 2;
}
else
v = v * 10;
return v;
};
void(string gibname, float dm) DogGib =
{
local entity new;
new = spawn();
new.origin = self.origin;
setmodel (new, gibname);
setsize (new, '0 0 0', '0 0 0');
new.velocity = DogVelocityForDamage (dm);
new.movetype = MOVETYPE_BOUNCE;
new.solid = SOLID_NOT;
new.avelocity_x = random()*600;
new.avelocity_y = random()*600;
new.avelocity_z = random()*600;
new.think = SUB_Remove;
new.ltime = time;
new.nextthink = time + 10 + random()*10;
new.frame = 0;
new.flags = 0;
};
void() DogBecomeExplosion =
{
sound (self, CHAN_WEAPON, "dog/dattack1.wav", 1, ATTN_NORM);
self.movetype = MOVETYPE_NONE;
self.velocity = '0 0 0';
self.touch = SUB_Null;
setmodel (self, "progs/s_explod.spr");
self.solid = SOLID_NOT;
s_spreadexplode1();
DogGib ("progs/gib1.mdl",100);
DogGib ("progs/gib2.mdl",100);
DogGib ("progs/gib3.mdl",100);
};
void() T_DogTouch =
{
local float damg;
if (other == self.owner)
return; // don't explode on owner
if (pointcontents(self.origin) == CONTENT_SKY)
{
remove(self);
return;
}
// damg = 100 + random()*20; Previous value
damg = 10;
if (other.health)
{
T_Damage (other, self, self.owner, damg );
}
// don't do radius damage to the other, because all the damage
// was done in the impact
// T_RadiusDamage (self, self.owner, 120, other);
// sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
self.origin = self.origin - 8*normalize(self.velocity);
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_EXPLOSION);
WriteCoord (MSG_BROADCAST, self.origin_x);
WriteCoord (MSG_BROADCAST, self.origin_y);
WriteCoord (MSG_BROADCAST, self.origin_z);
DogBecomeExplosion();
};
void() W_FireDog =
{
local entity missile, mpuff;
// self.currentammo = self.ammo_rockets = self.ammo_rockets - 1;
sound (self, CHAN_WEAPON, "weapons/sgun1.wav", 1, ATTN_NORM);
self.punchangle_x = -2;
missile = spawn ();
missile.owner = self;
missile.movetype = MOVETYPE_FLYMISSILE;
missile.solid = SOLID_BBOX;
// set missile speed
makevectors (self.v_angle);
missile.velocity = aim(self, 1000);
missile.velocity = missile.velocity * 1000;
missile.angles = vectoangles(missile.velocity);
missile.touch = T_DogTouch;
// set missile duration
// missile.nextthink = time + 30;
// missile.think = SUB_Remove;
missile.nextthink = time + 0.2; //HOMING CODE!!!!
missile.think = HomeThink;
missile.enemy = world;
setmodel (missile, "progs/dog.mdl");
setsize (missile, '0 0 0', '0 0 0');
setorigin (missile, self.origin + v_forward*8 + '0 0 16');
};
/*
==============================================================================
CONTRA SPREAD GUN
==============================================================================
*/
void() SpreadBecomeExplosion =
{
self.movetype = MOVETYPE_NONE;
self.velocity = '0 0 0';
self.touch = SUB_Null;
setmodel (self, "progs/s_explod.spr");
self.solid = SOLID_NOT;
s_spreadexplode1();
};
void() T_SpreadTouch =
{
local float damg;
if (other == self.owner)
return; // don't explode on owner
if (pointcontents(self.origin) == CONTENT_SKY)
{
remove(self);
return;
}
// damg = 100 + random()*20; Previous value
damg = 40 + random()*20; //Previous value
if (other.health)
{
T_Damage (other, self, self.owner, damg );
}
// don't do radius damage to the other, because all the damage
// was done in the impact
// T_RadiusDamage (self, self.owner, 120, other);
// sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
self.origin = self.origin - 8*normalize(self.velocity);
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_EXPLOSION);
WriteCoord (MSG_BROADCAST, self.origin_x);
WriteCoord (MSG_BROADCAST, self.origin_y);
WriteCoord (MSG_BROADCAST, self.origin_z);
SpreadBecomeExplosion ();
};
void() W_FireSpread =
{
local entity missile1, mpuff;
local entity missile2, mpuff;
local entity missile3, mpuff;
local entity missile4, mpuff;
local entity missile5, mpuff;
if (self.ammo_cells < 1)
{
sprint(self, "Cells Needed to Fire Spread Gun\n");
self.weapon = W_BestWeapon ();
W_SetCurrentAmmo ();
return;
}
self.currentammo = self.ammo_cells = self.ammo_cells - 5;
if(self.ammo_cells < 0) {self.ammo_cells=0;}
sound (self, CHAN_WEAPON, "weapons/spredgun.wav", 1, ATTN_NORM);
self.punchangle_x = -2;
missile1 = spawn ();
missile1.owner = self;
missile1.movetype = MOVETYPE_FLYMISSILE;
missile1.solid = SOLID_BBOX;
missile2 = spawn ();
missile2.owner = self;
missile2.movetype = MOVETYPE_FLYMISSILE;
missile2.solid = SOLID_BBOX;
missile3 = spawn ();
missile3.owner = self;
missile3.movetype = MOVETYPE_FLYMISSILE;
missile3.solid = SOLID_BBOX;
missile4 = spawn ();
missile4.owner = self;
missile4.movetype = MOVETYPE_FLYMISSILE;
missile4.solid = SOLID_BBOX;
missile5 = spawn ();
missile5.owner = self;
missile5.movetype = MOVETYPE_FLYMISSILE;
missile5.solid = SOLID_BBOX;
// set missile speed
makevectors (self.v_angle);
missile1.velocity = aim(self, 1000);
missile1.velocity = missile1.velocity * 1000;
missile1.angles = vectoangles(missile1.velocity);
missile1.touch = T_SpreadTouch;
makevectors (self.v_angle + '0 11 0');
missile2.velocity = aim(self, 1000);
missile2.velocity = missile2.velocity * 1000;
missile2.angles = vectoangles(missile2.velocity);
missile2.touch = T_SpreadTouch;
makevectors (self.v_angle + '0 -11 0');
missile3.velocity = aim(self, 1000);
missile3.velocity = missile3.velocity * 1000;
missile3.angles = vectoangles(missile3.velocity);
missile3.touch = T_SpreadTouch;
makevectors (self.v_angle + '0 22 0');
missile4.velocity = aim(self, 1000);
missile4.velocity = missile4.velocity * 1000;
missile4.angles = vectoangles(missile4.velocity);
missile4.touch = T_SpreadTouch;
makevectors (self.v_angle + '0 -22 0');
missile5.velocity = aim(self, 1000);
missile5.velocity = missile5.velocity * 1000;
missile5.angles = vectoangles(missile5.velocity);
missile5.touch = T_SpreadTouch;
// set missile duration
missile1.nextthink = time + 5; // number is # of secs missle lasts
missile1.think = SUB_Remove;
// missile1.nextthink = time + 0.2;
// missile1.think = HomeThink;
// missile1.enemy = world;
setmodel (missile1, "progs/spredgun.mdl");
setsize (missile1, '0 0 0', '0 0 0');
setorigin (missile1, self.origin + v_forward*8 + '0 0 16');
missile2.nextthink = time + 5; // number is # of secs missle lasts
missile2.think = SUB_Remove;
// missile2.nextthink = time + 0.2;
// missile2.think = HomeThink;
// missile2.enemy = world;
setmodel (missile2, "progs/spredgun.mdl");
setsize (missile2, '0 0 0', '0 0 0');
setorigin (missile2, self.origin + v_forward*8 + '0 0 16');//16
missile3.nextthink = time + 5; // number is # of secs missle lasts
missile3.think = SUB_Remove;
// missile3.nextthink = time + 0.2;
// missile3.think = HomeThink;
// missile3.enemy = world;
setmodel (missile3, "progs/spredgun.mdl");
setsize (missile3, '0 0 0', '0 0 0');
setorigin (missile3, self.origin + v_forward*8 + '0 0 16'); //16
missile4.nextthink = time + 5; // number is # of secs missle lasts
missile4.think = SUB_Remove;
// missile4.nextthink = time + 0.2;
// missile4.think = HomeThink;
// missile4.enemy = world;
setmodel (missile4, "progs/spredgun.mdl");
setsize (missile4, '0 0 0', '0 0 0');
setorigin (missile4, self.origin + v_forward*8 + '0 0 16');//16
missile5.nextthink = time + 5; // number is # of secs missle lasts
missile5.think = SUB_Remove;
// missile5.nextthink = time + 0.2;
// missile5.think = HomeThink;
// missile5.enemy = world;
setmodel (missile5, "progs/spredgun.mdl");
setsize (missile5, '0 0 0', '0 0 0');
setorigin (missile5, self.origin + v_forward*8 + '0 0 16'); //16
};
/*
==============================================================================
CONTRA HOMING SPREAD GUN
==============================================================================
*/
void() HomeSpreadBecomeExplosion =
{
self.movetype = MOVETYPE_NONE;
self.velocity = '0 0 0';
self.touch = SUB_Null;
setmodel (self, "progs/s_explod.spr");
self.solid = SOLID_NOT;
s_spreadexplode1();
};
void() T_HomeSpreadTouch =
{
local float damg;
if (other == self.owner)
return; // don't explode on owner
if (pointcontents(self.origin) == CONTENT_SKY)
{
remove(self);
return;
}
// damg = 100 + random()*20; Previous value
damg = 40 + random()*20; //Previous value
if (other.health)
{
T_Damage (other, self, self.owner, damg );
}
// don't do radius damage to the other, because all the damage
// was done in the impact
// T_RadiusDamage (self, self.owner, 120, other);
// sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
self.origin = self.origin - 8*normalize(self.velocity);
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_EXPLOSION);
WriteCoord (MSG_BROADCAST, self.origin_x);
WriteCoord (MSG_BROADCAST, self.origin_y);
WriteCoord (MSG_BROADCAST, self.origin_z);
HomeSpreadBecomeExplosion ();
};
void() W_FireHomeSpread =
{
local entity missile1, mpuff;
local entity missile2, mpuff;
local entity missile3, mpuff;
local entity missile4, mpuff;
local entity missile5, mpuff;
if (self.ammo_cells < 1)
{
sprint(self, "Cells Needed to Fire Homing Spread Gun\n");
self.weapon = W_BestWeapon ();
W_SetCurrentAmmo ();
return;
}
self.currentammo = self.ammo_cells = self.ammo_cells - 25;
if(self.ammo_cells < 0) {self.ammo_cells=0;}
sound (self, CHAN_WEAPON, "weapons/spredgun.wav", 1, ATTN_NORM);
self.punchangle_x = -2;
missile1 = spawn ();
missile1.owner = self;
missile1.movetype = MOVETYPE_FLYMISSILE;
missile1.solid = SOLID_BBOX;
missile2 = spawn ();
missile2.owner = self;
missile2.movetype = MOVETYPE_FLYMISSILE;
missile2.solid = SOLID_BBOX;
missile3 = spawn ();
missile3.owner = self;
missile3.movetype = MOVETYPE_FLYMISSILE;
missile3.solid = SOLID_BBOX;
missile4 = spawn ();
missile4.owner = self;
missile4.movetype = MOVETYPE_FLYMISSILE;
missile4.solid = SOLID_BBOX;
missile5 = spawn ();
missile5.owner = self;
missile5.movetype = MOVETYPE_FLYMISSILE;
missile5.solid = SOLID_BBOX;
// set missile speed
makevectors (self.v_angle);
missile1.velocity = aim(self, 1000);
missile1.velocity = missile1.velocity * 1000;
missile1.angles = vectoangles(missile1.velocity);
missile1.touch = T_HomeSpreadTouch;
makevectors (self.v_angle + '0 11 0');
missile2.velocity = aim(self, 1000);
missile2.velocity = missile2.velocity * 1000;
missile2.angles = vectoangles(missile2.velocity);
missile2.touch = T_HomeSpreadTouch;
makevectors (self.v_angle + '0 -11 0');
missile3.velocity = aim(self, 1000);
missile3.velocity = missile3.velocity * 1000;
missile3.angles = vectoangles(missile3.velocity);
missile3.touch = T_HomeSpreadTouch;
makevectors (self.v_angle + '0 22 0');
missile4.velocity = aim(self, 1000);
missile4.velocity = missile4.velocity * 1000;
missile4.angles = vectoangles(missile4.velocity);
missile4.touch = T_HomeSpreadTouch;
makevectors (self.v_angle + '0 -22 0');
missile5.velocity = aim(self, 1000);
missile5.velocity = missile5.velocity * 1000;
missile5.angles = vectoangles(missile5.velocity);
missile5.touch = T_HomeSpreadTouch;
// set missile duration
missile1.nextthink = time + 30; // number is # of secs missle lasts
missile1.think = SUB_Remove;
missile1.nextthink = time + 0.2;
missile1.think = HomeThink;
missile1.enemy = world;
setmodel (missile1, "progs/spredgun.mdl");
setsize (missile1, '0 0 0', '0 0 0');
setorigin (missile1, self.origin + v_forward*8 + '0 0 16');
missile2.nextthink = time + 30; // number is # of secs missle lasts
missile2.think = SUB_Remove;
missile2.nextthink = time + 0.2;
missile2.think = HomeThink;
missile2.enemy = world;
setmodel (missile2, "progs/spredgun.mdl");
setsize (missile2, '0 0 0', '0 0 0');
setorigin (missile2, self.origin + v_forward*8 + '0 0 16');//16
missile3.nextthink = time + 30; // number is # of secs missle lasts
missile3.think = SUB_Remove;
missile3.nextthink = time + 0.2;
missile3.think = HomeThink;
missile3.enemy = world;
setmodel (missile3, "progs/spredgun.mdl");
setsize (missile3, '0 0 0', '0 0 0');
setorigin (missile3, self.origin + v_forward*8 + '0 0 16'); //16
missile4.nextthink = time + 30; // number is # of secs missle lasts
missile4.think = SUB_Remove;
missile4.nextthink = time + 0.2;
missile4.think = HomeThink;
missile4.enemy = world;
setmodel (missile4, "progs/spredgun.mdl");
setsize (missile4, '0 0 0', '0 0 0');
setorigin (missile4, self.origin + v_forward*8 + '0 0 16');//16
missile5.nextthink = time + 30; // number is # of secs missle lasts
missile5.think = SUB_Remove;
missile5.nextthink = time + 0.2;
missile5.think = HomeThink;
missile5.enemy = world;
setmodel (missile5, "progs/spredgun.mdl");
setsize (missile5, '0 0 0', '0 0 0');
setorigin (missile5, self.origin + v_forward*8 + '0 0 16'); //16
};
/*
==============================================================================
SWITCH CONTROL
==============================================================================
*/
void() SwitchSpread =
{
if (self.spredgun == 9){self.spredgun=0;}
if (self.spredgun == 2)
{
self.spredgun = 0;
sprint(self, "Rocket Launcher Armed\n");
self.impulse=7;
W_ChangeWeapon();
}
else if (self.spredgun == 1)
{
self.spredgun = 2;
sprint(self, "Homing Spread Gun Armed\n");
self.impulse=7;
W_ChangeWeapon();
}
else if (self.spredgun == 0)
{
self.spredgun = 1;
sprint(self, "Spread Gun Armed\n");
self.impulse=7;
W_ChangeWeapon();
self.items = self.items | IT_CELLS;
}
};
void() SwitchDog =
{
if (self.spredgun == 1){self.spredgun=0;}
if (self.spredgun == 2){self.spredgun=0;}
if (self.spredgun == 9)
{
self.spredgun = 0;
sprint(self, "Rocket Launcher Armed\n");
self.impulse=7;
W_ChangeWeapon();
}
else if (self.spredgun == 0)
{
self.spredgun = 9;
sprint(self, "Dog Rocket Armed!!!\n");
self.impulse=7;
W_ChangeWeapon();
}
};
/*
==============================================================================
HOMING CODE
==============================================================================
*/
entity() HomeFindTarget =
{
local entity head, selected;
local float dist;
dist = 100000;
selected = world;
head = findradius(self.origin, 100000);
while(head)
{
if( (head.health > 1) && (head != self) && (head != self.owner) )
{
traceline(self.origin,head.origin,TRUE,self);
if ( (trace_fraction >= 1) && (vlen(head.origin - self.origin) < dist) )
{
selected = head;
dist = vlen(head.origin - self.origin);
}
}
head = head.chain;
}
if (selected != world)
{
sprint (self.owner,"Homing in on ");
if (selected.classname == "player")
{
sprint (self.owner,selected.netname);
sprint (selected,self.owner.netname);
sprint (selected," has Let his Puppy Go!!!\n");
}
else
sprint (self.owner,selected.classname);
sprint (self.owner,"\n");
}
return selected;
};
void() HomeThink =
{
local vector dir, vtemp;
if ( !(self.enemy) || (self.enemy == world) || (self.enemy.health < 1) )
self.enemy = HomeFindTarget();
if (self.enemy != world) // Arr.. don't be taken on da World!
{
vtemp = self.enemy.origin + '0 0 10';
dir = normalize(vtemp - self.origin);
self.velocity = dir * 250;
self.angles = vectoangles(self.velocity);
}
self.nextthink = time + 0.2;
self.think=HomeThink;
};